package org.example.util6;

public class Manager extends Employee{
    /**
     * 关键字 extends 表明正在构造的新类派生于一个已存在的类。
     * 已存在的类称为超类( superclass)、 基类（ base class) 或父类（parent class);
     * 新类称为子类（subclass、) 派生类( derived class) 或孩子类（child class)。
     */
//    public double getBonus() {
//        return bonus;
//    }

    public void setBonus(double bonus) {//不是Employee中定义的，所以Employee类的对象不可以调用这个方法
        this.bonus = bonus;
    }

    private double bonus;
    public Manager(String name, Double salary) {
        super(name, salary);
    }

    @Override
    public Double getSalary() {
        /**
         * Manager类里的方法要访问私有域，必须通过公有方法来访问；super关键字可以调用超类的公有方法
         */

        return super.getSalary();
    }
}
/**
 * 关键字 this 有两个用途： 一是引用隐式参数，二是调用该类其他的构造器
 * super 关键字也有两个用途：一是调用超类的方法，二是调用超类的构造器
 */
/**
 * 若 y是Manager对象，x是Employee对象 y.compareTo(x) 会报错，
 * 因为x是Employee对象而不是Manager对象，y.compareTo(x) 会将 x转为Manager对象
 * 如果x不能被转为Manager对象，就会抛出ClassCastException(运行时异常，将对象强制转换为不兼容的类型，表明在代码中进行了非法的类型转换)
 */
/**
 * 若 y是Manager对象，x是Employee对象 x.compareTo(y) 不会报错，
 * 因为y是Manager对象 继承 Employee，y被视为Employee对象 相同对象才能进行比较
 */
